const { commentModels, articleModels } = require("../../models");

//后台获取评论
exports.getCommentPage = async function (req, res) {
  try {
    // 从请求体中获取数据
    let data = req.body;
    // 初始化评论总数，-1 表示未获取
    let count = -1;
    // 调用 commentModels 的 getCommentPage 方法获取分页评论数据
    await commentModels
      .getCommentPage(data.pageSize, data.nowPage)
      .then(async (result) => {
        // 如果请求中需要获取评论总数
        if (data.count) {
          // 调用 commentModels 的 getCommentCount 方法获取评论总数
          let c = await commentModels.getCommentCount(-1);
          // 将获取到的评论总数赋值给 count
          count = c[0].count;
        }
        // 如果获取到了评论数据
        if (result.length > 0) {
          // 遍历每条评论数据
          for (let i = 0; i < result.length; i++) {
            // 获取对应的文章标题
            let getArticTitle = await articleModels.getArticTitle(
              result[i].article_id
            );
            // 如果获取到了文章标题
            if (getArticTitle.length > 0) {
              // 为评论添加文章信息，包含文章 ID 和标题
              result[i].article = {
                id: result[i].article_id,
                title: getArticTitle[0].title,
              };
            } else {
              // 如果未获取到文章标题，说明文章可能已删除或不存在，添加默认文章信息
              result[i].article = {
                id: -1,
                title: "文章已删除或不存在",
              };
            }
          }
        }
        // 返回成功响应，包含评论数据和评论总数
        res.send({
          code: 200,
          data: {
            result,
            count,
          },
        });
      });
  } catch (error) {
    // 捕获异常，返回失败响应，包含错误信息
    res.send({
      code: 400,
      data: error,
    });
  }
};

//将评论状态更新为已读
exports.updateCommentStatus = async function (req, res) {
  try {
    let data = req.body;
    await commentModels.updateCommentStatus(data.id).then((result) => {
      res.send({
        code: 200,
        data: result,
      });
    });
  } catch (error) {
    res.send({
      code: 400,
      data: error,
    });
  }
};

//删除评论
exports.deleteComment = async function (req, res) {
  try {
    let data = req.body;
    await commentModels.deleteComment(data.id).then((result) => {
      res.send({
        code: 200,
        data: result,
      });
    });
  } catch (error) {
    res.send({
      code: 400,
      data: error,
    });
  }
};

// 新增评论
exports.addComment = async function (req, res) {
  try {
    let data = req.body;
    await commentModels.addComment(data).then((result) => {
      res.send({
        code: 200,
        data: result,
      });
    });
  } catch (error) {
    res.send({
      code: 400,
      data: error,
    });
  }
};

//前台根据文章id获取一级评论
exports.getCommentByArticleId = async function (req, res) {
  try {
    // 初始化评论总数，-1 表示未获取
    let count = -1;
    let data = req.body;
    await commentModels
      .getCommentByArticleId(data.article_id, data.pageSize, data.nowPage)
      .then(async (result) => {
        // 如果请求中需要获取评论总数
        if (data.count) {
          // 调用 commentModels 的 getCommentCount 方法获取评论总数
          let c = await commentModels.getCommentCount(data.article_id);
          // 将获取到的评论总数赋值给 count
          count = c[0].count;
        }
        // 如果获取到了评论数据
        res.send({
          code: 200,
          result,
          count,
        });
      });
  } catch (error) {
    res.send({
      code: 400,
      data: error,
    });
  }
};

//举报评论
exports.complaintComment = async function (req, res) {
  try {
    let data = req.body;
    await commentModels.complaintComment(data.id).then((result) => {
      res.send({
        code: 200,
        data: result,
      });
    });
  } catch (error) {
    res.send({
      code: 400,
      data: error,
    });
  }
};